// models/article_model.go
// 定义多对多关联关系的数据模型
// 该文件包含ArticleModel（文章）和TagModel（标签）两个结构体
// 演示了GORM中多对多关联关系的定义方式和使用方法
package models

// ArticleModel 表示文章模型
// 该模型映射到数据库中的article_models表
// 与TagModel之间是多对多关联关系
// 一个文章可以有多个标签，一个标签也可以属于多个文章
type ArticleModel struct {
	ID      int         `gorm:"primaryKey"` // 主键ID，自动递增
	Title   string      `gorm:"size:32;not null"` // 文章标题，最大长度32字符，不能为空
	TagList []TagModel  `gorm:"many2many:article_tags;"` // 关联的标签列表，多对多关系
	// many2many:article_tags 指定中间表名称为article_tags
	// GORM会自动创建或使用这个中间表来管理ArticleModel和TagModel之间的关联关系
}

// TagModel 表示标签模型
// 该模型映射到数据库中的tag_models表
// 与ArticleModel之间是多对多关联关系
type TagModel struct {
	ID          int           `gorm:"primaryKey"` // 主键ID，自动递增
	Title       string        `gorm:"size:32;not null;unique"` // 标签名称，最大长度32字符，不能为空且唯一
	// unique约束确保标签名称在tag_models表中是唯一的
	ArticleList []ArticleModel `gorm:"many2many:article_tags;"` // 关联的文章列表，多对多关系
	// 与ArticleModel使用相同的中间表article_tags
	// 这种定义方式允许从TagModel访问所有关联的ArticleModel
}
